// @ts-nocheck
/**
 * example 1
 * 验证正常的变量提升
 * 结论：
 *      变量：
 *          通过var声明的变量在当前作用域会在编译阶段得到提升，在正式赋值以前，访问不会报错，返回undefined
 *      函数：
 *          通过字面量声明函数的方式，会在编译阶段得到提升，但和变量的区别是，函数是可以访问并且调用的
 *          但是如果是通过赋值的操作，就不会得到提升
 *      标识符冲突：
 *          function 的提升比 var 更高，即便其顺序在var后
 * ps：node环境下的var不会将变量挂载到global上
 */

// 定义时声明
console.log(a); // undefined
var a = 3;
console.log(a); // 3

// 函数定义时声明
console.log(fun1); // [Function: fun1]
function fun1() {}

// 定义在前，声明在后
b = 4;
console.log(b);
var b;

// 函数赋值
console.log(typeof fun2); // undefined
var fun2 = function fun() {};
console.log(typeof fun2); // function

// 函数和变量的提升优先级
console.log(fun3); // [Function: fun3]
function fun3() {}
var fun3 = "变量";
console.log(fun3); // 变量
